import PubSub from 'pubsub-js';
import request from '../../utils/request';
import moment from 'moment';
const appInstance = getApp();
Page({

    /**
     * 页面的初始数据
     */
    data: {
        isPlay: true, //标识音乐播放状态
        song:{}, // 歌曲信息
        musicLink:'', //当前歌曲链接
        currentTime: '00:00',//当前播放时长
        durationTime: '00:00', //总时长 
        currentWidth: 0,//实时播放进度条宽度
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        //options 用于接收路由跳转的query参数
        //小程序路由传参，参数长度有限制，如果参数长度过长会自动截取
        this.getSongDetail(options.song);

        this.musicControl(this.data.isPlay,options.song);
        //判断音乐是否在播放
        
        if(appInstance.globalData.isMusicPlay && appInstance.globalData.musicId === options.song*1){
            this.setData({
                isPlay:true
            })
        }else{
            this.setData({
                isPlay:false
            })
        }

        //通过系统后台控制播放暂停，页面显示与实际不合
        //解决方案  通过控制音频实例 监听音乐播放暂停
        //把音频控制实例赋给this对象，提升全局作用域
        this.backGroundAudioManager = wx.getBackgroundAudioManager();
        this.backGroundAudioManager.onPlay(()=>{
            //修改音乐播放状态
            this.changePlayStatus(true);
            //修改全局音乐播放状态
            appInstance.globalData.musicId = options.song;
        });
        this.backGroundAudioManager.onPause(()=>{
            this.changePlayStatus(false);
        });
        this.backGroundAudioManager.onStop(()=>{
            this.changePlayStatus(false);
        });
        //监听音乐播放自然结束
        this.backGroundAudioManager.onEnded(()=>{
            //自动切换成下一首音乐
            PubSub.publish('switchType','next');
            //将时事进度条时间还原成0
            this.setData({
                currentWidth: 0,
                currentTime: '00:00'
            })
        })

        //监听音乐实时播放的进度
        this.backGroundAudioManager.onTimeUpdate(()=>{            
            //格式化实时的时间
            let currentTime = moment(this.backGroundAudioManager.currentTime * 1000).format('mm:ss');
            // 实时进度条实现  当前时长/总时长 = 当前进度条长度/总进度条长度
            // 所以当前进度条长度 = 当前时长/总时长 * 总进度条长度
            let currentWidth = this.backGroundAudioManager.currentTime/this.backGroundAudioManager.duration;
            this.setData({
                currentTime,
                currentWidth
            })
        })
    },

    //修改播放状态的功能函数
    changePlayStatus(isPlay){
        this.setData({
            isPlay
        })
        //修改全局音乐播放状态
        appInstance.globalData.isMusicPlay = isPlay;
    },

    //获取歌曲详情信息
    async getSongDetail(songId){
        let result = await request('/song/detail',{ids:songId});
        // 歌曲总时长 result.songs[0].dt  单位 ms  毫秒
        let durationTime = moment(result.songs[0].dt).format('mm:ss');
        this.setData({
            song:result.songs[0],
            durationTime
        })
    },

    //控制播放暂停回调
    handleMusicPlay(){
        let {musicLink} = this.data;
        this.changePlayStatus(!this.data.isPlay);
        this.musicControl(this.data.isPlay,this.data.song.id,musicLink);
    },

    //控制音乐播放暂停的功能性函数
    async musicControl(isPlay,muiscId,musicLink){
        if(isPlay){//播放时
            if(!musicLink){
                let result = await request('/song/url',{id:muiscId});
                musicLink = result.data[0].url;
                this.setData({
                    musicLink
                })
            }           
            this.backGroundAudioManager.src = musicLink;
            this.backGroundAudioManager.title = this.data.song.name;
        }else{//暂停时
            this.backGroundAudioManager.pause();
        }
    },

    //点击切换歌曲的回调
    handleSwitch(event){
        // 获取切换的类型
        let type = event.currentTarget.id;
        // 关闭当前播放的音乐
        this.backGroundAudioManager.stop();
        //订阅来自recommendSong页面发布的musicId消息
        PubSub.subscribe('musicId',(msg,data) => {
            if(data.index === 0){
                wx.showToast({
                  title: 'title',
                })
            }
            this.getSongDetail(data.musicId);
            this.musicControl(true,data.musicId); 
            // 取消订阅
            PubSub.unsubscribe('musicId');         
        })
        
        // 发布消息数据给recommendSong页面
        PubSub.publish('switchType',type);
    },    

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    }
})